package com.tedu.API.thread;
/**
 * 线程----创建3种
 * 第一种：子类  继承Thread 方案【使用率不多】
 *      ①编写子类 MyThread1  继承 Thread
 *      ②子类，重写run方法【线程运行】
 *      ③实例化 MyThread1  对象   调用start方法【启动】
 * 第二种：子类  实现Runnable 方案--【推荐用法】
 *       ①编写子类MyRunnable1 实现 Runnable 接口
 *       ②子类，强制重写run方法【线程运行】
 *       ③实例化MyRunnable1对象【没有start方法】
 *       ④创建Thread对象，把实例化MyRunnable1对象通过构造器
 *       ⑤调用Thread对象 start方法
 * 线程   继承Thread  内嵌Runnable接口   重写run方法
 *       JavaOOP----缺点：Java支持单继承、子类继承Thread，
 *       无法拓展：不仅线程、其他集合、继承其他类，只具备线程功能
 *       启动线程方法  start()----线程生命周期
 *       缺点：线程创建不明确
 *       实现Runnable   真正线程运行---定义run方法，线程运行状态
 *       优点：继承还可以实现--拓展性高
 *       缺点：线程创建不方便---项目：步骤逻辑清晰
 * 第三种：匿名内部类实现线程--->Lambda表达式
 */
public class RunnableAPI {
    public static void main(String[] args) {
        // 创建 实现线程  对象  ---启动必须用start()
        MyRunnable1 mr1=new MyRunnable1();
        //创建Thread对象----启动线程方法
        Thread t1=new Thread(mr1);
        t1.start();
        //练习：MyRunnable2  子类   实现Runnable----1000次
        //                         岁月不停留，可我为你守候
        MyRunnable2 mr2=new MyRunnable2();
        Thread t2=new Thread(mr2);
        t2.start();
    }
}
class MyRunnable1 implements Runnable{
    public void run() {
        for(int i=0;i<1000;i++){
            System.out.println("时间不等人，但我等你");
        }
    }
}
class MyRunnable2 implements Runnable{
    public void run() {
        for(int i=0;i<1000;i++){
            System.out.println("岁月不停留，可我为你守候");
        }
    }
}